package com.caocaog.market.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.caocaog.market.entity.GoodsBase;
import com.caocaog.market.entity.vo.GoodsVO;
import org.jeecg.common.system.base.service.GenericService;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 商品基础信息
 *
 * @author chechen
 * @date 2022-04-18
 */
public interface GoodsBaseService extends GenericService<GoodsBase> {


    /**
     * 查询商品基础信息分页
     * 会自动将排序字段改为 sort dest + createTime dest
     *
     * @param page       分页信息
     * @param goodsBase 查询条件
     * @return 商品基础信息分页
     */
    IPage<GoodsBase> queryGoodsBasePage(Page<GoodsBase> page, GoodsBase goodsBase);

    /**
     * 根据商品分类id获取未下架的商品基础信息
     *
     * @param categoriesId 商品分类id
     * @return 商品基础信息集合
     */
    List<GoodsBase> getShowGoodsBaseByCategoriesId(String categoriesId);

    /**
     * 新增商品基础信息（缓存）
     *
     * @param goodsBase 商品基础信息
     * @return 新增后的商品基础信息
     */
    GoodsBase insertGoodsBase(GoodsBase goodsBase);

    /**
     * 更新商品基础信息（缓存）
     *
     * @param goodsBase 商品基础信息
     * @return 更新后的商品基础信息
     */
    GoodsBase updateGoodsBase(GoodsBase goodsBase);

    /**
     * 根据商品分类ids获取商品ids
     *
     * @param categoriesIds 商品分类ids
     * @return 商品ids
     * @see #selectListByFieldCache
     */
    String[] getGoodsIdsByCategoriesIds(@NotNull @Size(min = 1) String... categoriesIds);

    /**
     * 根据店铺id清空购物车（缓存）
     * @param shopId 店铺id
     */
    void cleanShopCart(String shopId);

    /**
     * 切换上下架状态
     */
    int statusChange(String id);

    /**
     * 切换是否上首页状态
     */
    int isIndexChange(String id);

    /**
     * 切换是否是热门状态
     */
    int isHotChange(String id);

    /**
     * 切换是否是热门状态
     */
    int oneNoDeliveryChange(String id);

    /**
     * 根据频道Id查询出全部的商品信息
     * @param channelId 频道Id
     * @return 查询到的商品信息
     */
    List<GoodsBase> getAllGoodsByChannelId(String channelId);
}
